﻿#region License
// Copyright (c) 2012 Mund Consulting Ltd
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
#endregion
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.Utilities;

namespace Mund.Sharepoint.Publishing
{
    /// <summary>
    /// It enables to change master page and css of this site and its immediate sub site
    /// </summary>
    public partial class ChangeMasterPage : LayoutsPageBase
    {
        const string constMasterPageCatalogPath = "/_catalogs/Masterpage/";
        const string constServerRelativeRootWeb = "/";

        protected void Page_Load(object sender, EventArgs e)
        {
            SPSite curSite = SPContext.Current.Site;
            SPWeb curWeb = SPContext.Current.Web;
            if (curWeb.IsRootWeb == true)
            {
                rdbInheritMaster.Enabled = false;
                rdbAltParentCss.Enabled = false;
                rdbSelectMaster.Checked = true;
                rdbMSfDefaultCss.Checked = true;
            }
            else
            {
                rdbInheritMaster.Enabled = true;
                rdbAltParentCss.Enabled = true;
                rdbSelectMaster.Checked = true;
                rdbMSfDefaultCss.Checked = true;
            }

            if (!IsPostBack)
            {
                SPList masterList = curWeb.GetCatalog(SPListTemplateType.MasterPageCatalog);
                string managedPath = string.Empty;
                if (curWeb.ServerRelativeUrl != constServerRelativeRootWeb)
                    managedPath = curWeb.ServerRelativeUrl;
                foreach (SPListItem item in masterList.Items)
                {
                    ddlMasterPages.Items.Add(new ListItem(item.File.Name, item.File.Name));
                    
                    if (curWeb.CustomMasterUrl.ToUpper() == (managedPath+"/" + item.File.Url).ToUpper())
                        ddlMasterPages.SelectedIndex = ddlMasterPages.Items.Count - 1;
                }
            }
        }

        protected void SaveSettings(object sender, EventArgs e)
        {
            SPSite curSite = SPContext.Current.Site;
            SPWeb curWeb = SPContext.Current.Web;
            string serverRelativeMaster = curWeb.ServerRelativeUrl + constMasterPageCatalogPath;
            string catalog = string.Empty;
            if (curWeb.ServerRelativeUrl != constServerRelativeRootWeb)
            {
                catalog = serverRelativeMaster;
            }
            else
            {
                catalog = constMasterPageCatalogPath;
            }


            /* Master Page Settings */

            if (rdbSelectMaster.Checked)
            {
                curWeb.CustomMasterUrl = catalog + ddlMasterPages.SelectedValue;

            }
            if (rdbInheritMaster.Checked)
            {
                curWeb.CustomMasterUrl = curWeb.ParentWeb.CustomMasterUrl;
            }

            // when checked only immediate subsite masterpage setting changes
            //if (chbxResetMasterPage.Checked)
            //{
            //    foreach (SPWeb web in curWeb.Webs)
            //    {
            //        web.CustomMasterUrl = web.ParentWeb.CustomMasterUrl;
            //        web.Update();
            //    }
            //}

            /* CSS Settings */

            if (rdbSelectCss.Checked)
            {
                curWeb.AlternateCssUrl = tbxCssUrl.Text;
            }
            if (rdbAltParentCss.Checked)
            {
                curWeb.AlternateCssUrl = curWeb.ParentWeb.AlternateCssUrl;
            }

            // when checked only immediate subsite CSS Setting changes
            //if (chbxResetCss.Checked)
            //{
            //    foreach (SPWeb web in curWeb.Webs)
            //    {
            //        web.AlternateCssUrl = web.ParentWeb.AlternateCssUrl;
            //        web.Update();
            //    }
            //}
            curWeb.Update();
        }

        protected void DoCancel(object sender, EventArgs e)
        {
            SPUtility.Redirect(string.Empty, SPRedirectFlags.UseSource, Context);
        }
    }
}
